package com.jdf.dao.component;

import com.jdf.dao.interfaces.IAdministradorDAO;
import com.jdf.database.AccesoDB;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

public class AdministradorDAO implements IAdministradorDAO {

    @Override
    public Map consultarPorUsuario(String usuario) throws Exception {
        Map rec = new HashMap();
        Connection cn = null;
        try {
            AccesoDB acce = new AccesoDB();
            cn = acce.conectar();
            String query = "select * from usuario where usu_codigo=?";
            PreparedStatement pstm = cn.prepareStatement(query);
            pstm.setString(1, usuario);
            ResultSet rs = pstm.executeQuery();
            if (rs.next()) {
                rec.put("id_usuario", rs.getInt("id_usuario"));
                rec.put("usu_codigo", rs.getString("usu_codigo"));
                rec.put("usu_clave", rs.getString("usu_clave"));
                rec.put("usu_nombre", rs.getString("usu_nombre"));
                rec.put("usu_cargo", rs.getString("usu_cargo"));
                rec.put("usu_dni", rs.getString("usu_dni"));
                rec.put("usu_direccion", rs.getString("usu_direccion"));
                rec.put("usu_telefono", rs.getString("usu_telefono"));
                rec.put("usu_fecnac", rs.getDate("usu_fecnac"));
                rec.put("usu_inilab", rs.getDate("usu_inilab"));
                rec.put("usu_email", rs.getString("usu_email"));
                rec.put("usu_mensual", rs.getDouble("usu_mensual"));
                rec.put("usu_brevete", rs.getString("usu_brevete"));
                rec.put("usu_expbrevete", rs.getDate("usu_expbrevete"));
                rec.put("id_tipousuario", rs.getInt("id_tipousuario"));
                rec.put("id_categoriausuario", rs.getInt("id_categoriausuario"));
            }
            pstm.close();
        } catch (Exception e) {
            throw e;
        }
        return rec;
    }

    public void agregarUsuarios(Map reg) {
        throw new UnsupportedOperationException("Not yet implemented");
    }

    @Override
    public ArrayList<Map> getTipos() throws Exception {
        // creamos la lista de tipos vacia
        ArrayList<Map> lstTipo = new ArrayList<Map>();
        Connection cn = null;
        try {
            // conectamos la BD 
            AccesoDB db = new AccesoDB();
            cn = db.conectar();
            // obtenemos los tipos
            String query = "select id_tipousuario,tipusu_descripcion from tipo_usuario";
            Statement stm = cn.createStatement();
            ResultSet rs = stm.executeQuery(query);
            while (rs.next()) {
                Map rec = new HashMap();
                // guardamos en un map los datos de cada tipo
                rec.put("id_tipousuario", rs.getInt("id_tipousuario"));
                rec.put("tipusu_descripcion", rs.getString("tipusu_descripcion"));
                lstTipo.add(rec);
                for (Map map : lstTipo) {
                    System.out.println(map.get("tipusu_descripcion").toString());
                }
            }
            stm.close();
            cn.close();
        } catch (Exception e) {
            throw e;
        }
        // devolvemos el array de tipos
        return lstTipo;
    }

    @Override
    public ArrayList<Map> listarUsuarios() throws Exception {
        
        ArrayList<Map> lstUsuarios = new ArrayList<Map>();
        Connection cn = null;
        try {
            // conectamos la BD 
            AccesoDB db = new AccesoDB();
            cn = db.conectar();
            String query = "select usu_codigo,usu_clave,usu_nombre,usu_cargo,usu_dni,"
                    + "usu_direccion,usu_telefono,usu_fecnac,usu_inilab,usu_email,usu_mensual,"
                    + "usu_brevete,usu_expbrevete,tu.id_tipousuario,cu.id_categoriausuario "
                    + "from usuario u inner join tipo_usuario tu on u.id_tipousuario = tu.id_tipousuario "
                    + "inner join categoria_usuario cu on cu.id_categoriausuario = u.id_categoriausuario where usu_estado='1' ";

            Statement stm = cn.createStatement();
            ResultSet rs = stm.executeQuery(query);
            while (rs.next()) {
                Map rec = new HashMap();
                // obtenemos un usuario
                rec.put("id_usuario", rs.getInt("id_usuario"));
                rec.put("usu_codigo", rs.getString("usu_codigo"));
                rec.put("usu_clave", rs.getString("usu_clave"));
                rec.put("usu_nombre", rs.getString("usu_nombre"));
                rec.put("usu_cargo", rs.getString("usu_cargo"));
                rec.put("usu_dni", rs.getString("usu_dni"));
                rec.put("usu_direccion", rs.getString("usu_direccion"));
                rec.put("usu_telefono", rs.getString("usu_telefono"));
                rec.put("usu_fecnac", rs.getDate("usu_fecnac"));
                rec.put("usu_inilab", rs.getDate("usu_inilab"));
                rec.put("usu_email", rs.getString("usu_email"));
                rec.put("usu_mensual", rs.getDouble("usu_mensual"));
                rec.put("usu_brevete", rs.getString("usu_brevete"));
                rec.put("usu_expbrevete", rs.getDate("usu_expbrevete"));
                rec.put("id_tipousuario", rs.getInt("id_tipousuario"));
                rec.put("id_categoriausuario", rs.getInt("id_categoriausuario"));
                // lo almacenamos en el array
                lstUsuarios.add(rec);
            }
            stm.close();
            cn.close();
        } catch (Exception e) {
            throw e;
        }
        // devolvemos el array de usuarios
        return lstUsuarios;
    }
}
